﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;

namespace projetoFinal.pages.chamado
{
    public partial class incluirChamado : baseWebPage
    {
        protected void Page_Init(object sender, EventArgs e)
        {
            base.Modulo = operaModulo.buscar("CHAMADO");
        }
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!Page.IsPostBack)
            {
                lblTitulo.Text = "Chamado";

                //Arruma o diretório das imagens
                menuTopo.setDiretorio("../");
                menuEsquerda.setDiretorio("../");
                
                Page.Form.DefaultButton = this.btnProximo_Passo1.UniqueID;

                txtPlaca.Attributes.Add("onkeypress", "javascript:FormataPlaca(this);");                                
                txtPlaca.Attributes.Add("onkeyup", "javascript:FormataPlaca(this);");                

                bindTipoProblema();
                
                tabPasso2.Enabled = false;
                tabPasso3.Enabled = false;
                //tabPasso4.Enabled = false;
                
                body.Attributes.Add("onLoad", "javascript:initialize();");
                body.Attributes.Add("onunload", "javascript:GUnload();");

                //No caso de inclusao
                if (!base.CanCreate)
                {
                    this.btnProximo_Passo1.Visible = false;
                    this.information.Visible = true;

                    this.lblTitleInformation.Text = "Aviso!";
                    this.lblMessageInformation.Text = "Você não possui permissão para incluir registros!";
                }
            }        
        }
        protected void tabChamados_ActiveTabChanged(object sender, EventArgs e)
        {
            switch (tabChamados.ActiveTabIndex)
            {
                case 0:
                    tabPasso2.Enabled = false;
                    tabPasso3.Enabled = false;
                    //tabPasso4.Enabled = false;
                    break;
                case 1:
                    tabPasso3.Enabled = false;
                    //tabPasso4.Enabled = false;
                    break;
                case 2:
                    //tabPasso4.Enabled = false;
                    break;
            }
        }
        protected void btnProximo_Passo1_Click(object sender, EventArgs e)
        {
            if (txtPlaca.Value.Length == 8)
            {
                bindAssociadoVeiculo(txtPlaca.Value);
                divMensagemPasso1.Visible = false;
            }
            else
            {
                //Placa inválida
                tblListagemClientes.Visible = false;
                divMensagemPasso1.Visible = true;
                msgPasso1.Text = "A placa informada é inválida.";
            }
        }
        protected void btnProximo_Passo2_Click(object sender, EventArgs e)
        {
            if ((txtEndereco.Value.Length > 0) && (txtNumero.Value.Length > 0) && (txtCidade.Value.Length > 0) && (selUF.SelectedIndex != 0) && (selTipoProblema.SelectedIndex != 0) && (txtDescricao.Value.Length > 0))
            {
                divMensagemPasso2.Visible = false;

                //Vai para o próximo passo
                tabPasso3.Enabled = true;
                tabChamados.ActiveTabIndex = 2;
                
                //Efetua a chamada para as funções do Google Maps
                body.Attributes.Add("onLoad", "javascript:initialize();setSearchValues();main();");

                //Busca os endereços dos prestadores de serviços para, posteriormente, buscar as 5 menores distâncias
                hdnEnderecoPrestador.Value = String.Join(";",operaPrestadorServico.listar("", "1", 1).Select(p => p.Endereco + ", " + p.Numero + ", " + p.Cidade + ", " + p.Uf + "|" + p.CodCadastro).ToArray());                
            }
            else
            {
                divMensagemPasso2.Visible = true;
                msgPasso2.Text = "Você deve preencher todos os campos para continuar.";
            }
        }

        protected void btnIncluirChamado_Click(object sender, EventArgs e)
        {
            projetoFinal.chamado objChamado = new projetoFinal.chamado();          
            objChamado.Endereco = txtEndereco.Value;
            objChamado.Numero = txtNumero.Value;
            objChamado.Cidade = txtCidade.Value;
            objChamado.Uf = selUF.Items[selUF.SelectedIndex].Value;
            objChamado.TipoProblema = operaTipoProblema.buscar(Int64.Parse(selTipoProblema.Items[selTipoProblema.SelectedIndex].Value));
            objChamado.Descricao = txtDescricao.Value;
            objChamado.Prestador = operaPrestadorServico.buscar(Int64.Parse(hdnCodigoPrestador.Value));
            objChamado.AssociadoCarro = operaAssociadoCarro.buscar(Int64.Parse(ViewState["chamado"].ToString()));        
            objChamado.Seguradora = (this.CodCadastro.HasValue) ? operaSeguradora.buscar(Int64.Parse(this.CodCadastro.Value.ToString())) : null;
            objChamado.Associado = objChamado.AssociadoCarro.Associado;    
            
            //Inclusão                 
            int cont = operaChamado.incluir(objChamado);
            if (cont > 0)
            {
                Response.Redirect("listagem.aspx?msg=3", false);
            }
            else
            {
                Response.Redirect("listagem.aspx?msg=4", false);
            }
        }
        protected void tblListagemClientes_ItemDataBound(object sender, DataListItemEventArgs e)
        {
            if ((e.Item.ItemType == ListItemType.Item) || (e.Item.ItemType == ListItemType.AlternatingItem))
            {
                ImageButton lnkSelecionar = (ImageButton)e.Item.FindControl("lnkSelecionar");
                HtmlInputHidden hdnCodAssociadoCarro = (HtmlInputHidden)e.Item.FindControl("hdnCodAssociadoCarro");
                Literal lblNome = (Literal)e.Item.FindControl("lblNome");
                Literal lblCPF = (Literal)e.Item.FindControl("lblCPF");
                Literal lblMarca = (Literal)e.Item.FindControl("lblMarca");
                Literal lblCarro = (Literal)e.Item.FindControl("lblCarro");

                projetoFinal.associadoCarro o = (projetoFinal.associadoCarro)e.Item.DataItem;

                if ((lnkSelecionar != null) && (lblNome != null) && (lblCPF != null) && (lblMarca != null) && (lblCarro != null) && (hdnCodAssociadoCarro != null))
                {
                    //Não está com as contas em dia, logo não pode atender
                    if (o.Associado.SitFinanceiro == situacaoFinanceira.atrasado)
                    {
                        lnkSelecionar.Attributes.Add("onclick", "javascript:alert('O associado não está com a situação financeira em dia e portanto não pode ser efetuado o chamado.'); return false;");
                    }
                    hdnCodAssociadoCarro.Value = o.CodAssociadoCarro.ToString();
                    lblNome.Text = o.Associado.Nome.ToString();
                    lblCPF.Text = o.Associado.Cpf.ToString();
                    lblMarca.Text = o.Marca.ToString();
                    lblCarro.Text = o.Modelo.ToString();
                }
            }
        }
        protected void tblListagemClientes_ItemCommand(object source, DataListCommandEventArgs e)
        {
            if (e.CommandName == "selecionar")
            {
                //Recupera os dados do Associado e da placa
                HtmlInputHidden hdnCodAssociadoCarro = (HtmlInputHidden)e.Item.FindControl("hdnCodAssociadoCarro");
                if (hdnCodAssociadoCarro != null)
                {                    
                    //Grava o chamado para recuperar posteriormente
                    ViewState["chamado"] = hdnCodAssociadoCarro.Value;

                    //Vai para o próximo passo
                    tabPasso2.Enabled = true;
                    tabChamados.ActiveTabIndex = 1;
                }
            }
        }

        private void bindAssociadoVeiculo(string sPlaca)
        {
            List<projetoFinal.associadoCarro> lstCarroEncontrado = operaAssociadoCarro.buscar(sPlaca);
            if (lstCarroEncontrado.Count > 0)
            {
                divMensagemPasso1.Visible = false;
                tblListagemClientes.Visible = true;
                tblListagemClientes.DataSource = lstCarroEncontrado;
                tblListagemClientes.DataBind();
            }
            else
            {
                //Mensagem que não foi encontrado
                tblListagemClientes.Visible = false;
                divMensagemPasso1.Visible = true;
                msgPasso1.Text = "A placa informada não foi encontrada.";
            }
        }
        private void bindTipoProblema()
        {
            selTipoProblema.DataSource = operaTipoProblema.listar("", "", 0);
            selTipoProblema.DataTextField = "descr";
            selTipoProblema.DataValueField = "codTipoProblema";
            selTipoProblema.DataBind();
            selTipoProblema.Items.Insert(0, new ListItem("Selecione...", ""));
        }
    }
}